package twelfth.数据操作流;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

/**
 * DataInputStream是InputStream类的子类，专门负责读取使用DataOutputStream输出的数据
 * 此类的定义：public class DataInputStream extends FilterInputStream implements DataInput
 * 此类继承子FilterInputStream(FileterInputStream 是InputStream类的子类),同时实现DataInput接口
 * 在DataInput接口中定义了一系列读入数据的方法
 * 提示：DataInput接口的作用
 * 这个接口是读取数据的操作接口，与DataOutput接口提供的各种writeXXX方法对应，在此接口中定义了一些列的readXXX方法，
 * 一般操作的时候不会直接利用到此接口，而主要使用DataInputSream类完成爬取功能，只有在对象序列化订单时候才有可能直接利用此接口读取数据
 * 这一点在讲解Externalizable接口的时候在介绍。
 * DataInputStream类常用方法：
 * DataInputStream(InputStream in)：构造方法，实例化对象
 * int readInt()：从输入流中读取整数
 * fload readFloat()：从输入流中读取小数
 * char readChar()：从输入流中读取一个字符
 */
public class 从文件中读取数据 {
    public static void main(String[] args) throws IOException {
        File file = new File("D:"+File.separator+"WorkSpaces"+File.separator+"JavaDevelopBase_start_329"+File.separator+"src"+File.separator+"twelfth"+File.separator+"DataOutoutStream.txt");
        DataInputStream dis = new DataInputStream(new FileInputStream(file));
        String name = null;
        float price = 0.0f;
        int num = 0;
        char temp[] = null;
        char c = 0;
        int len = 0;
        try {
            while (true) {
                temp = new char[200];
                len = 0;
                while ((c = dis.readChar()) != '\t') {
                    temp[len] = c;
                    len++;
                }
                name = new String(temp, 0, len);
                price = dis.readFloat();
                dis.readChar();
                num = dis.readInt();
                dis.readChar();
                System.out.printf("名称：%s；价格：%5.2f;数量：%d\n", name, price, num);
            }
        } catch (IOException e) {
            // throw new RuntimeException(e); 找了半天才知道要注释掉这一行
        }
    }
}
/**
 * 在用数据输入流读取的啥时候，因为每条记录之间使用“\t”作为间隔，每行记录之间使用“\n”作为分隔符，
 * 所以要分别使用readChar()读取这两个分隔符，才能让数据正确的还原
 */
/*
D:\WorkSpaces\Java\jdk-21\bin\java.exe "-javaagent:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\lib\idea_rt.jar=65465:D:\Software\IntelliJ IDEA\IntelliJ IDEA 2023.3.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\WorkSpaces\JavaDevelopBase_start_329\out\production\JavaDevelopBase_start_329 twelfth.数据操作流.从文件中读取数据
名称：pairs；价格：11.10;数量：2

Process finished with exit code 0

 */